//给你一幅由 N × N 矩阵表示的图像，其中每个像素的大小为 4 字节。请你设计一种算法，将图像旋转 90 度。 
//
// 不占用额外内存空间能否做到？ 
//
// 
//
// 示例 1： 
//
// 
//给定 matrix = 
//[
//  [1,2,3],
//  [4,5,6],
//  [7,8,9]
//],
//
//原地旋转输入矩阵，使其变为:
//[
//  [7,4,1],
//  [8,5,2],
//  [9,6,3]
//]
// 
//
// 示例 2： 
//
// 
//给定 matrix =
//[
//  [ 5, 1, 9,11],
//  [ 2, 4, 8,10],
//  [13, 3, 6, 7],
//  [15,14,12,16]
//], 
//
//原地旋转输入矩阵，使其变为:
//[
//  [15,13, 2, 5],
//  [14, 3, 4, 1],
//  [12, 6, 8, 9],
//  [16, 7,10,11]
//]
// 
//
// 注意：本题与主站 48 题相同：https://leetcode-cn.com/problems/rotate-image/ 
//
// Related Topics 数组 数学 矩阵 👍 303 👎 0


package LeetCode.editor.cn;


/**
 * @author ldltd
 * @date 2025-06-04 19:58:39
 * @description 面试题 01.07.旋转矩阵
 
 */
 
public class RotateMatrixLcci {
    public static void main(String[] args) {
    //测试代码
    RotateMatrixLcci fun = new RotateMatrixLcci();
    Solution solution= fun.new Solution();
    
    }

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public void rotate1(int[][] matrix) {
        int m=0;
        int n=matrix.length;
        int t=0;
        //从外到内翻转，一共需要反转n/2层
        for (int i = 0; i < n / 2; i++) {
            //每层交换n-2*i-1个方块
            for (int j = i; j < n - i - 1; j++) {
                //先保存左上角的值
                t=matrix[n-j-1][i];
                for (int k = 0; k < 4; k++) {
                    m=matrix[i][j];
                    matrix[i][j]=t;
                    //计算旋转后的下一个坐标，顺便借用t来交换坐标,t最终保存的是当前坐标的值
                    t=i;
                    i=j;
                    j=n-1-t;
                    t=m;
                }
            }
        }
    }
    //翻转代替旋转，先水平翻转，再对角线翻转
    public void rotate(int[][] matrix) {
        int n=matrix.length;
        //水平翻转
        for (int i = 0; i < n / 2; i++) {
            for (int j = 0; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - i][j];
                matrix[n - 1 - i][j] = temp;
            }
        }
        //对角线翻转
        for (int i = 0; i < n; i++) {
            for (int j = i + 1; j < n; j++) {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }
    }


}
//leetcode submit region end(Prohibit modification and deletion)

}
